import time
import os  # 导入os模块
def log(f):     #装饰器 导入函数f
    def metric_log(*arg,**kw):     # 匿名函数 计算运行时间
        start_time = time.time()   # 开始时间
        res =f(*arg,**kw)               # 执行目标函数
        end_time = time.time()     #结束时间
        print('耗时：{:.4f}s'.format(end_time - start_time))  #运行时间
        return res                   # 返回函数结果
    return metric_log              # 返回函数结果



#测试装饰器

def file_size(file):
    f_size = os.path.getsize(file)  # 获取文件大小os.path.getsize()
    return f_size
#计算指定文件夹的大小
@log
def dir_size(dir):
    flist = []  # 文件的地址list
    def file_list(dir):   # 获取文件夹内所有文件地址
        dlist = os.listdir(dir)  # 获取文件夹的内文件(夹)的目录
        for f in dlist:  # 遍历文件夹，目的是拿到 flist
            f1 = os.path.join(dir, f)  # 拼接子文件地址
            if os.path.isfile(f1):
                flist.append(f1)   # 如果是文件，则将地址放入文件list
            if os.path.isdir(f1):
                file_list(f1)  # 如果是文件夹，则将递归调用自己，来实现文件的查找
        return flist      # 返回文件的地址list,
    sum_size = 0   # 初始化文件大小为0
    for f in file_list(dir):  #遍历文件list，获取每个文件大小并且累加
        sum_size=file_size(f)+sum_size
    return sum_size


# 测试
print(dir_size('E:\BaiduNetdisk'))

